package com.xb.loan.account.service;


import com.xb.loan.account.service.bean.CouponBillVO;
import com.xb.loan.account.service.bean.CouponInfoVO;
import com.xb.loan.log.exception.BizException;
import com.xb.loan.usercenter.service.user.bean.UserInfoVO;

import java.util.List;

/**
 * 
 * 项目名称 : common-service
 * 创建日期 : 2015年9月9日
 * 类  描  述 : 礼券账户服务接口
 */
public interface ICouponService {
    /**
     * 
     * 向礼卷账户添加礼券信息。添加礼券账户基本表、礼券账户帐务表记录。
     * @param foreignId 记账来源订单ID
     * @param userInfoVO 用户信息
     * @param couponInfoVO 礼券信息
     * @param billType 记账类型
     * @param accountPeriod 账期（对账用）
     * @return 新增的礼券编码
     */
    String addCoupon(String foreignId, UserInfoVO userInfoVO, CouponInfoVO couponInfoVO, int billType, String accountPeriod) throws BizException;

    /**
     * 
     * 消费礼券。扣除礼卷账户的礼券信息。修改礼券账户基本表记录，添加礼券账户帐务表记录。
     * @param foreignId 记账来源订单ID
     * @param userInfoVO 用户信息
     * @param couponId 优惠卷编码
     * @param money 消费金额
     * @param billType 记账类型
     * @param accountPeriod 账期（对账用）格式：yyyyddmm
     * @return 
     * @throws BizException
     */
    void deductCoupon(String foreignId, UserInfoVO userInfoVO, String couponId, double money, int billType, String accountPeriod)
            throws BizException;

    /**
     * 
     * 修改礼卷账户的礼券信息。修改礼券账户基本表记录。
     * @param couponInfoVO 礼券信息
     * @return 返回修改操作记录的条数
     * @throws BizException
     */
    int updateCouponInfo(CouponInfoVO couponInfoVO) throws BizException;

    /**
     * 分页查询礼券基本信息。资金账户ID、活动编号、优惠券编码、创建开始日期、创建结束日期，至少输入其中一项参数进行查询。
     * @param accountId 资金账户ID
     * @param activitiesId 活动编码
     * @param couponID 优惠卷编码
     * @param startDate 创建开始日期，格式：(YYYY-MM-DD)
     * @param endDate 创建结束日期，格式：(YYYY-MM-DD)
     * @param pageNum 页数
     * @param numPerPage 每页显示记录条数
     * @return 返回礼券账户基本信息对象集合
     * @throws BizException
     */
    List<CouponInfoVO> queryCouponInfo(String accountId, String activitiesId, String couponID, String startDate, String endDate, int pageNum,
                                       int numPerPage) throws BizException;

    /**
     * 查询礼券基本信息记录条数。资金账户ID、活动编号、优惠券编码、创建开始日期、创建结束日期，至少输入其中一项参数进行查询。
     * @param accountId 资金账户ID
     * @param activitiesId 活动编码
     * @param couponID 优惠卷编码
     * @param startDate 创建开始日期，格式：(YYYY-MM-DD)
     * @param endDate 创建结束日期，格式：(YYYY-MM-DD)
     * @return 返回查询礼券基本信息的记录条数。
     * @throws BizException
     */
    int queryCouponInfoCount(String accountId, String activitiesId, String couponID, String startDate, String endDate) throws BizException;

    /**
     *
     * 分页查询礼券账户帐务信息。资金账户ID、活动编号、优惠券编码、付费类型、记账类型、创建开始日期、创建结束日期，至少输入其中一项参数进行查询。
     * @param accountId 资金账户ID
     * @param activitiesId 活动编码
     * @param couponID 优惠卷编码
     * @param feeType 付费类型
     * @param billType 记账类型（编码）
     * @param startDate 创建开始日期，格式：(YYYY-MM-DD)
     * @param endDate 创建结束日期，格式：(YYYY-MM-DD)
     * @param pageNum 页数
     * @param numPerPage 每页显示记录条数
     * @return 返回礼券账户帐务信息对象集合
     * @throws BizException
     */
    List<CouponBillVO> queryCouponBill(String accountId, String activitiesId, String couponID, Integer feeType, Integer billType, String startDate,
                                       String endDate, int pageNum, int numPerPage) throws BizException;

    /**
     *
     * 查询礼券账户帐务信息记录条数。资金账户ID、活动编号、优惠券编码、付费类型、记账类型、创建开始日期、创建结束日期，至少输入其中一项参数进行查询。
     * @param accountId 资金账户ID
     * @param activitiesId 活动编码
     * @param couponId 优惠卷编码
     * @param feeType 付费类型
     * @param billType 记账类型（编码）
     * @param startDate 创建开始日期，格式：(YYYY-MM-DD)
     * @param endDate 创建结束日期，格式：(YYYY-MM-DD)
     * @return 返回查询礼券账户帐务信息的记录条数。
     * @throws BizException
     */
    int queryCouponBillCount(String accountId, String activitiesId, String couponId, Integer feeType, Integer billType, String startDate,
                             String endDate) throws BizException;
    
    /**
	 * 冲正接口
	 * @param userId 用户ID
	 * @param foreignId 记账来源订单ID
	 * @param billType 记账类型
	 */
	public void flushes(String userId, String foreignId, int billType) throws BizException;
}
